home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / BBS-Archive / Comm / AmiTCP30b2.lha / netinclude / inline / usergroup.h < prev   
C/C++ Source or Header  |  1994-04-08  |  16KB  |  574 lines

  1. #ifndef _INLINE_USERGROUP_H
  2. #define _INLINE_USERGROUP_H
  3.  
  4. /*
  5.  * $Id: usergroup.h,v 3.2 1994/04/08 15:21:28 too Exp $
  6.  * $Release$
  7.  *
  8.  * Gcc inlines for usergroup.library. 
  9.  *
  10.  * Copyright © 1994 AmiTCP/IP Group, <amitcp-group@hut.fi>
  11.  *                  All rights reserved.
  12.  *
  13.  */
  14. #include <sys/cdefs.h>
  15. #include <inline/stubs.h>
  16.  
  17. __BEGIN_DECLS
  18.  
  19. #ifdef BASE_EXT_DECL
  20. #error BASE_EXT_DECL etc declarations not allowed
  21. #endif
  22.  
  23. #ifndef USERGROUPBASE_IN_CONTEXT
  24. #define BASE_EXT_DECL extern struct Library * UserGroupBase;
  25. #define BASE_PAR_DECL
  26. #define BASE_PAR_DECL0 void
  27. #else
  28. #define BASE_EXT_DECL
  29. #define BASE_PAR_DECL struct Library * UserGroupBase,
  30. #define BASE_PAR_DECL0 struct Library * UserGroupBase
  31. #endif
  32. #define BASE_NAME UserGroupBase
  33.  
  34. static __inline char *
  35. crypt (BASE_PAR_DECL const char *key,const char * salt)
  36. {
  37.   BASE_EXT_DECL
  38.   register char * _res  __asm("d0");
  39.   register struct Library * a6 __asm("a6") = BASE_NAME;
  40.   register const char *a0 __asm("a0") = key;
  41.   register const char *a1 __asm("a1") =  salt;
  42.   __asm __volatile ("jsr a6@(-0xae)"
  43.   : "=r" (_res)
  44.   : "r" (a6), "r" (a0), "r" (a1)
  45.   : "a0","a1","d0","d1", "memory");
  46.   return _res;
  47. }
  48. static __inline void 
  49. endgrent (BASE_PAR_DECL0)
  50. {
  51.   BASE_EXT_DECL
  52.   register struct Library * a6 __asm("a6") = BASE_NAME;
  53.   __asm __volatile ("jsr a6@(-0xa8)"
  54.   : /* no output */
  55.   : "r" (a6)
  56.   : "a0","a1","d0","d1", "memory");
  57. }
  58. static __inline void 
  59. endpwent (BASE_PAR_DECL0)
  60. {
  61.   BASE_EXT_DECL
  62.   register struct Library * a6 __asm("a6") = BASE_NAME;
  63.   __asm __volatile ("jsr a6@(-0x8a)"
  64.   : /* no output */
  65.   : "r" (a6)
  66.   : "a0","a1","d0","d1", "memory");
  67. }
  68. static __inline void 
  69. endutent (BASE_PAR_DECL0)
  70. {
  71.   BASE_EXT_DECL
  72.   register struct Library * a6 __asm("a6") = BASE_NAME;
  73.   __asm __volatile ("jsr a6@(-0xf0)"
  74.   : /* no output */
  75.   : "r" (a6)
  76.   : "a0","a1","d0","d1", "memory");
  77. }
  78. static __inline gid_t 
  79. getegid (BASE_PAR_DECL0)
  80. {
  81.   BASE_EXT_DECL
  82.   register gid_t  _res  __asm("d0");
  83.   register struct Library * a6 __asm("a6") = BASE_NAME;
  84.   __asm __volatile ("jsr a6@(-0x4e)"
  85.   : "=r" (_res)
  86.   : "r" (a6)
  87.   : "a0","a1","d0","d1", "memory");
  88.   return _res;
  89. }
  90. static __inline uid_t 
  91. geteuid (BASE_PAR_DECL0)
  92. {
  93.   BASE_EXT_DECL
  94.   register uid_t  _res  __asm("d0");
  95.   register struct Library * a6 __asm("a6") = BASE_NAME;
  96.   __asm __volatile ("jsr a6@(-0x36)"
  97.   : "=r" (_res)
  98.   : "r" (a6)
  99.   : "a0","a1","d0","d1", "memory");
  100.   return _res;
  101. }
  102. static __inline gid_t 
  103. getgid (BASE_PAR_DECL0)
  104. {
  105.   BASE_EXT_DECL
  106.   register gid_t  _res  __asm("d0");
  107.   register struct Library * a6 __asm("a6") = BASE_NAME;
  108.   __asm __volatile ("jsr a6@(-0x48)"
  109.   : "=r" (_res)
  110.   : "r" (a6)
  111.   : "a0","a1","d0","d1", "memory");
  112.   return _res;
  113. }
  114. static __inline struct group *
  115. getgrent (BASE_PAR_DECL0)
  116. {
  117.   BASE_EXT_DECL
  118.   register struct group * _res  __asm("d0");
  119.   register struct Library * a6 __asm("a6") = BASE_NAME;
  120.   __asm __volatile ("jsr a6@(-0xa2)"
  121.   : "=r" (_res)
  122.   : "r" (a6)
  123.   : "a0","a1","d0","d1", "memory");
  124.   return _res;
  125. }
  126. static __inline struct group *
  127. getgrgid (BASE_PAR_DECL gid_t gid)
  128. {
  129.   BASE_EXT_DECL
  130.   register struct group * _res  __asm("d0");
  131.   register struct Library * a6 __asm("a6") = BASE_NAME;
  132.   register gid_t d0 __asm("d0") = gid;
  133.   __asm __volatile ("jsr a6@(-0x96)"
  134.   : "=r" (_res)
  135.   : "r" (a6), "r" (d0)
  136.   : "a0","a1","d0","d1", "memory");
  137.   return _res;
  138. }
  139. static __inline struct group *
  140. getgrnam (BASE_PAR_DECL const char * name)
  141. {
  142.   BASE_EXT_DECL
  143.   register struct group * _res  __asm("d0");
  144.   register struct Library * a6 __asm("a6") = BASE_NAME;
  145.   register const char * a1 __asm("a1") = name;
  146.   __asm __volatile ("jsr a6@(-0x90)"
  147.   : "=r" (_res)
  148.   : "r" (a6), "r" (a1)
  149.   : "a0","a1","d0","d1", "memory");
  150.   return _res;
  151. }
  152. static __inline int 
  153. getgroups (BASE_PAR_DECL int ngroups,gid_t * groups)
  154. {
  155.   BASE_EXT_DECL
  156.   register int  _res  __asm("d0");
  157.   register struct Library * a6 __asm("a6") = BASE_NAME;
  158.   register int d0 __asm("d0") = ngroups;
  159.   register gid_t *a1 __asm("a1") =  groups;
  160.   __asm __volatile ("jsr a6@(-0x60)"
  161.   : "=r" (_res)
  162.   : "r" (a6), "r" (d0), "r" (a1)
  163.   : "a0","a1","d0","d1", "memory");
  164.   return _res;
  165. }
  166. static __inline struct lastlog *
  167. getlastlog (BASE_PAR_DECL uid_t uid)
  168. {
  169.   BASE_EXT_DECL
  170.   register struct lastlog * _res  __asm("d0");
  171.   register struct Library * a6 __asm("a6") = BASE_NAME;
  172.   register uid_t d0 __asm("d0") = uid;
  173.   __asm __volatile ("jsr a6@(-0xf6)"
  174.   : "=r" (_res)
  175.   : "r" (a6), "r" (d0)
  176.   : "a0","a1","d0","d1", "memory");
  177.   return _res;
  178. }
  179. static __inline char *
  180. getlogin (BASE_PAR_DECL0)
  181. {
  182.   BASE_EXT_DECL
  183.   register char * _res  __asm("d0");
  184.   register struct Library * a6 __asm("a6") = BASE_NAME;
  185.   __asm __volatile ("jsr a6@(-0xd8)"
  186.   : "=r" (_res)
  187.   : "r" (a6)
  188.   : "a0","a1","d0","d1", "memory");
  189.   return _res;
  190. }
  191. static __inline char *
  192. getpass (BASE_PAR_DECL const char *prompt)
  193. {
  194.   BASE_EXT_DECL
  195.   register char * _res  __asm("d0");
  196.   register struct Library * a6 __asm("a6") = BASE_NAME;
  197.   register const char *a1 __asm("a1") = prompt;
  198.   __asm __volatile ("jsr a6@(-0xba)"
  199.   : "=r" (_res)
  200.   : "r" (a6), "r" (a1)
  201.   : "a0","a1","d0","d1", "memory");
  202.   return _res;
  203. }
  204. static __inline pid_t 
  205. getpgrp (BASE_PAR_DECL0)
  206. {
  207.   BASE_EXT_DECL
  208.   register pid_t  _res  __asm("d0");
  209.   register struct Library * a6 __asm("a6") = BASE_NAME;
  210.   __asm __volatile ("jsr a6@(-0xd2)"
  211.   : "=r" (_res)
  212.   : "r" (a6)
  213.   : "a0","a1","d0","d1", "memory");
  214.   return _res;
  215. }
  216. static __inline struct passwd *
  217. getpwent (BASE_PAR_DECL0)
  218. {
  219.   BASE_EXT_DECL
  220.   register struct passwd * _res  __asm("d0");
  221.   register struct Library * a6 __asm("a6") = BASE_NAME;
  222.   __asm __volatile ("jsr a6@(-0x84)"
  223.   : "=r" (_res)
  224.   : "r" (a6)
  225.   : "a0","a1","d0","d1", "memory");
  226.   return _res;
  227. }
  228. static __inline struct passwd *
  229. getpwnam (BASE_PAR_DECL const char *name)
  230. {
  231.   BASE_EXT_DECL
  232.   register struct passwd * _res  __asm("d0");
  233.   register struct Library * a6 __asm("a6") = BASE_NAME;
  234.   register const char *a1 __asm("a1") = name;
  235.   __asm __volatile ("jsr a6@(-0x72)"
  236.   : "=r" (_res)
  237.   : "r" (a6), "r" (a1)
  238.   : "a0","a1","d0","d1", "memory");
  239.   return _res;
  240. }
  241. static __inline struct passwd *
  242. getpwuid (BASE_PAR_DECL uid_t uid)
  243. {
  244.   BASE_EXT_DECL
  245.   register struct passwd * _res  __asm("d0");
  246.   register struct Library * a6 __asm("a6") = BASE_NAME;
  247.   register uid_t d0 __asm("d0") = uid;
  248.   __asm __volatile ("jsr a6@(-0x78)"
  249.   : "=r" (_res)
  250.   : "r" (a6), "r" (d0)
  251.   : "a0","a1","d0","d1", "memory");
  252.   return _res;
  253. }
  254. static __inline uid_t 
  255. getuid (BASE_PAR_DECL0)
  256. {
  257.   BASE_EXT_DECL
  258.   register uid_t  _res  __asm("d0");
  259.   register struct Library * a6 __asm("a6") = BASE_NAME;
  260.   __asm __volatile ("jsr a6@(-0x30)"
  261.   : "=r" (_res)
  262.   : "r" (a6)
  263.   : "a0","a1","d0","d1", "memory");
  264.   return _res;
  265. }
  266. static __inline mode_t 
  267. getumask (BASE_PAR_DECL0)
  268. {
  269.   BASE_EXT_DECL
  270.   register mode_t  _res  __asm("d0");
  271.   register struct Library * a6 __asm("a6") = BASE_NAME;
  272.   __asm __volatile ("jsr a6@(-0xc6)"
  273.   : "=r" (_res)
  274.   : "r" (a6)
  275.   : "a0","a1","d0","d1", "memory");
  276.   return _res;
  277. }
  278. static __inline struct utmp *
  279. getutent (BASE_PAR_DECL0)
  280. {
  281.   BASE_EXT_DECL
  282.   register struct utmp * _res  __asm("d0");
  283.   register struct Library * a6 __asm("a6") = BASE_NAME;
  284.   __asm __volatile ("jsr a6@(-0xea)"
  285.   : "=r" (_res)
  286.   : "r" (a6)
  287.   : "a0","a1","d0","d1", "memory");
  288.   return _res;
  289. }
  290. static __inline int 
  291. initgroups (BASE_PAR_DECL const char *name,gid_t  basegroup)
  292. {
  293.   BASE_EXT_DECL
  294.   register int  _res  __asm("d0");
  295.   register struct Library * a6 __asm("a6") = BASE_NAME;
  296.   register const char *a1 __asm("a1") = name;
  297.   register gid_t d0 __asm("d0") =  basegroup;
  298.   __asm __volatile ("jsr a6@(-0x6c)"
  299.   : "=r" (_res)
  300.   : "r" (a6), "r" (a1), "r" (d0)
  301.   : "a0","a1","d0","d1", "memory");
  302.   return _res;
  303. }
  304. static __inline int 
  305. setgid (BASE_PAR_DECL gid_t id)
  306. {
  307.   BASE_EXT_DECL
  308.   register int  _res  __asm("d0");
  309.   register struct Library * a6 __asm("a6") = BASE_NAME;
  310.   register gid_t d0 __asm("d0") = id;
  311.   __asm __volatile ("jsr a6@(-0x5a)"
  312.   : "=r" (_res)
  313.   : "r" (a6), "r" (d0)
  314.   : "a0","a1","d0","d1", "memory");
  315.   return _res;
  316. }
  317. static __inline void 
  318. setgrent (BASE_PAR_DECL0)
  319. {
  320.   BASE_EXT_DECL
  321.   register struct Library * a6 __asm("a6") = BASE_NAME;
  322.   __asm __volatile ("jsr a6@(-0x9c)"
  323.   : /* no output */
  324.   : "r" (a6)
  325.   : "a0","a1","d0","d1", "memory");
  326. }
  327. static __inline int 
  328. setgroups (BASE_PAR_DECL int ngroups,const gid_t * groups)
  329. {
  330.   BASE_EXT_DECL
  331.   register int  _res  __asm("d0");
  332.   register struct Library * a6 __asm("a6") = BASE_NAME;
  333.   register int d0 __asm("d0") = ngroups;
  334.   register const gid_t *a1 __asm("a1") =  groups;
  335.   __asm __volatile ("jsr a6@(-0x66)"
  336.   : "=r" (_res)
  337.   : "r" (a6), "r" (d0), "r" (a1)
  338.   : "a0","a1","d0","d1", "memory");
  339.   return _res;
  340. }
  341. static __inline int 
  342. setlastlog (BASE_PAR_DECL uid_t uid,char * name,char * host)
  343. {
  344.   BASE_EXT_DECL
  345.   register int  _res  __asm("d0");
  346.   register struct Library * a6 __asm("a6") = BASE_NAME;
  347.   register uid_t d0 __asm("d0") = uid;
  348.   register char *a0 __asm("a0") =  name;
  349.   register char *a1 __asm("a1") =  host;
  350.   __asm __volatile ("jsr a6@(-0xfc)"
  351.   : "=r" (_res)
  352.   : "r" (a6), "r" (d0), "r" (a0), "r" (a1)
  353.   : "a0","a1","d0","d1", "memory");
  354.   return _res;
  355. }
  356. static __inline int 
  357. setlogin (BASE_PAR_DECL const char *buffer)
  358. {
  359.   BASE_EXT_DECL
  360.   register int  _res  __asm("d0");
  361.   register struct Library * a6 __asm("a6") = BASE_NAME;
  362.   register const char *a1 __asm("a1") = buffer;
  363.   __asm __volatile ("jsr a6@(-0xde)"
  364.   : "=r" (_res)
  365.   : "r" (a6), "r" (a1)
  366.   : "a0","a1","d0","d1", "memory");
  367.   return _res;
  368. }
  369. static __inline void 
  370. setpwent (BASE_PAR_DECL0)
  371. {
  372.   BASE_EXT_DECL
  373.   register struct Library * a6 __asm("a6") = BASE_NAME;
  374.   __asm __volatile ("jsr a6@(-0x7e)"
  375.   : /* no output */
  376.   : "r" (a6)
  377.   : "a0","a1","d0","d1", "memory");
  378. }
  379. static __inline int 
  380. setregid (BASE_PAR_DECL gid_t real,gid_t  eff)
  381. {
  382.   BASE_EXT_DECL
  383.   register int  _res  __asm("d0");
  384.   register struct Library * a6 __asm("a6") = BASE_NAME;
  385.   register gid_t d0 __asm("d0") = real;
  386.   register gid_t d1 __asm("d1") =  eff;
  387.   __asm __volatile ("jsr a6@(-0x54)"
  388.   : "=r" (_res)
  389.   : "r" (a6), "r" (d0), "r" (d1)
  390.   : "a0","a1","d0","d1", "memory");
  391.   return _res;
  392. }
  393. static __inline int 
  394. setreuid (BASE_PAR_DECL uid_t real,uid_t  eff)
  395. {
  396.   BASE_EXT_DECL
  397.   register int  _res  __asm("d0");
  398.   register struct Library * a6 __asm("a6") = BASE_NAME;
  399.   register uid_t d0 __asm("d0") = real;
  400.   register uid_t d1 __asm("d1") =  eff;
  401.   __asm __volatile ("jsr a6@(-0x3c)"
  402.   : "=r" (_res)
  403.   : "r" (a6), "r" (d0), "r" (d1)
  404.   : "a0","a1","d0","d1", "memory");
  405.   return _res;
  406. }
  407. static __inline pid_t 
  408. setsid (BASE_PAR_DECL0)
  409. {
  410.   BASE_EXT_DECL
  411.   register pid_t  _res  __asm("d0");
  412.   register struct Library * a6 __asm("a6") = BASE_NAME;
  413.   __asm __volatile ("jsr a6@(-0xcc)"
  414.   : "=r" (_res)
  415.   : "r" (a6)
  416.   : "a0","a1","d0","d1", "memory");
  417.   return _res;
  418. }
  419. static __inline int 
  420. setuid (BASE_PAR_DECL uid_t id)
  421. {
  422.   BASE_EXT_DECL
  423.   register int  _res  __asm("d0");
  424.   register struct Library * a6 __asm("a6") = BASE_NAME;
  425.   register uid_t d0 __asm("d0") = id;
  426.   __asm __volatile ("jsr a6@(-0x42)"
  427.   : "=r" (_res)
  428.   : "r" (a6), "r" (d0)
  429.   : "a0","a1","d0","d1", "memory");
  430.   return _res;
  431. }
  432. static __inline void 
  433. setutent (BASE_PAR_DECL0)
  434. {
  435.   BASE_EXT_DECL
  436.   register struct Library * a6 __asm("a6") = BASE_NAME;
  437.   __asm __volatile ("jsr a6@(-0xe4)"
  438.   : /* no output */
  439.   : "r" (a6)
  440.   : "a0","a1","d0","d1", "memory");
  441. }
  442. static __inline int 
  443. ug_GetErr (BASE_PAR_DECL0)
  444. {
  445.   BASE_EXT_DECL
  446.   register int  _res  __asm("d0");
  447.   register struct Library * a6 __asm("a6") = BASE_NAME;
  448.   __asm __volatile ("jsr a6@(-0x24)"
  449.   : "=r" (_res)
  450.   : "r" (a6)
  451.   : "a0","a1","d0","d1", "memory");
  452.   return _res;
  453. }
  454. static __inline char *
  455. ug_GetSalt (BASE_PAR_DECL const struct passwd *user,char * buffer,ULONG  size)
  456. {
  457.   BASE_EXT_DECL
  458.   register char * _res  __asm("d0");
  459.   register struct Library * a6 __asm("a6") = BASE_NAME;
  460.   register const struct passwd *a0 __asm("a0") = user;
  461.   register char *a1 __asm("a1") =  buffer;
  462.   register ULONG d0 __asm("d0") =  size;
  463.   __asm __volatile ("jsr a6@(-0xb4)"
  464.   : "=r" (_res)
  465.   : "r" (a6), "r" (a0), "r" (a1), "r" (d0)
  466.   : "a0","a1","d0","d1", "memory");
  467.   return _res;
  468. }
  469. static __inline int 
  470. ug_SetupContextTagList (BASE_PAR_DECL const UBYTE* pname,struct TagItem * taglist)
  471. {
  472.   BASE_EXT_DECL
  473.   register int  _res  __asm("d0");
  474.   register struct Library * a6 __asm("a6") = BASE_NAME;
  475.   register const UBYTE* a0 __asm("a0") = pname;
  476.   register struct TagItem *a1 __asm("a1") =  taglist;
  477.   __asm __volatile ("jsr a6@(-0x1e)"
  478.   : "=r" (_res)
  479.   : "r" (a6), "r" (a0), "r" (a1)
  480.   : "a0","a1","d0","d1", "memory");
  481.   return _res;
  482. }
  483. #ifndef NO_INLINE_STDARG
  484. #define ug_SetupContextTags(const UBYTE * pname, tags...) \
  485.     ({ ULONG _tags[] = { tags }; ug_SetupContextTagList(pname, _tags); })
  486. #endif
  487. static __inline const char *
  488. ug_StrError (BASE_PAR_DECL LONG code)
  489. {
  490.   BASE_EXT_DECL
  491.   register const char * _res  __asm("d0");
  492.   register struct Library * a6 __asm("a6") = BASE_NAME;
  493.   register LONG d1 __asm("d1") = code;
  494.   __asm __volatile ("jsr a6@(-0x2a)"
  495.   : "=r" (_res)
  496.   : "r" (a6), "r" (d1)
  497.   : "a0","a1","d0","d1", "memory");
  498.   return _res;
  499. }
  500. static __inline mode_t 
  501. umask (BASE_PAR_DECL mode_t mask)
  502. {
  503.   BASE_EXT_DECL
  504.   register mode_t  _res  __asm("d0");
  505.   register struct Library * a6 __asm("a6") = BASE_NAME;
  506.   register mode_t d0 __asm("d0") = mask;
  507.   __asm __volatile ("jsr a6@(-0xc0)"
  508.   : "=r" (_res)
  509.   : "r" (a6), "r" (d0)
  510.   : "a0","a1","d0","d1", "memory");
  511.   return _res;
  512. }
  513.  
  514. #ifdef USERGROUPBASE_IN_CONTEXT
  515.  
  516. /* Setup functions */
  517. #define ug_SetupContextTagList(r...) ug_SetupContextTagList(UserGroupBase, r)
  518. #define             ug_GetErr(r)    ug_GetErr(UserGroupBase)
  519. #define           ug_StrError(r...) ug_StrError(UserGroupBase, r)
  520. /* User identification */
  521. #define            getuid(r)    getuid(UserGroupBase)
  522. #define               geteuid(r)    geteuid(UserGroupBase)
  523. #define              setreuid(r...) setreuid(UserGroupBase, r)
  524. #define            setuid(r...) setuid(UserGroupBase, r)
  525. /* Group membership */
  526. #define            getgid(r)    getgid(UserGroupBase)
  527. #define               getegid(r)    getegid(UserGroupBase)
  528. #define              setregid(r...) setregid(UserGroupBase, r)
  529. #define            setgid(r...) setgid(UserGroupBase, r)
  530. #define             getgroups(r...) getgroups(UserGroupBase, r)
  531. #define             setgroups(r...) setgroups(UserGroupBase, r)
  532. #define            initgroups(r...) initgroups(UserGroupBase, r)
  533. /* User database */
  534. #define              getpwnam(r...) getpwnam(UserGroupBase, r)
  535. #define              getpwuid(r...) getpwuid(UserGroupBase, r)
  536. #define              setpwent(r)    setpwent(UserGroupBase)
  537. #define              getpwent(r)    getpwent(UserGroupBase)
  538. #define              endpwent(r)    endpwent(UserGroupBase)
  539. /* Group database */
  540. #define              getgrnam(r...) getgrnam(UserGroupBase, r)
  541. #define              getgrgid(r...) getgrgid(UserGroupBase, r)
  542. #define              setgrent(r)    setgrent(UserGroupBase)
  543. #define              getgrent(r)    getgrent(UserGroupBase)
  544. #define              endgrent(r)    endgrent(UserGroupBase)
  545. /* Password handling */
  546. #define             crypt(r...) crypt(UserGroupBase, r)
  547. #define            ug_GetSalt(r...) ug_GetSalt(UserGroupBase, r)
  548. #define               getpass(r...) getpass(UserGroupBase, r)
  549. /* Default protections */
  550. #define             umask(r...) umask(UserGroupBase, r)
  551. #define              getumask(r)    getumask(UserGroupBas)
  552. /* Sessions */
  553. #define            setsid(r)    setsid(UserGroupBase)
  554. #define               getpgrp(r)    getpgrp(UserGroupBase)
  555. #define              getlogin(r)    getlogin(UserGroupBase)
  556. #define              setlogin(r...) setlogin(UserGroupBase, r)
  557. /* Sessions, user login database (utmp) */
  558. #define              setutent(r)    setutent(UserGroupBase)
  559. #define              getutent(r)    getutent(UserGroupBase)
  560. #define              endutent(r)    endutent(UserGroupBase)
  561. #define            getlastlog(r...) getlastlog(UserGroupBase, r)
  562. #define            setlastlog(r...) setlastlog(UserGroupBase, r)
  563.  
  564. #endif /* USERGROUPBASE_IN_CONTEXT */
  565.  
  566. #undef BASE_EXT_DECL
  567. #undef BASE_PAR_DECL
  568. #undef BASE_PAR_DECL0
  569. #undef BASE_NAME
  570.  
  571. __END_DECLS
  572.  
  573. #endif /* _INLINE_USERGROUP_H */
  574.